[讨论]帮我看看这个Java基础题,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/07/01 02:00:12
Given:

1. class Programmer {
2. Programmer debug() { return this; }
3. }

4. class SCJP extends Programmer {
5. // insert code here
6. }

Which, inserted at line 5, will compile? (Choose all that apply.)

A. Programmer debug() { return this; }

B. SCJP debug() { return this; }

C. Object debug() { return this; }

D. int debug() { return 1; }

E. int debug(int x) { return 1; }

F. Object debug (int x) { return this; }

正确答案:A B E F

可是,方法的重写,不是要求要有相同的名称、相同的参数列表、相同的返回值么???

哪位给兄弟解释一下!感谢!
hotdog04,你说的对,可是为何这段简单的代码加入答案C,D 无法编译呢?而加入E,F的代码却可以通过!
可以编译通过呢?
按你所说"覆盖的参数的一切属性都要相同,返回类型也要一样",就不能解释这段代码出现的现象啊!!!

zicozhang,我感觉你说的到好像有点意思!
不过,你说的"返回值可以是子类,但不能为父类。里氏代换原则",好像无法解释答案F吧?F.返回值是父类Object,为何也可编译通过呢?谢谢你了!

再看看吧,如果没有其他的意见,我也只能选你了!^_^!谢谢你!

继承方法的重写,要求要有相同的名称、相同的参数列表、相同的返回值(返回值可以是子类,但不能为父类。里氏代换原则),所以AB对,CD不对。但是非继承方法的重写,则要求参数列表不同。所以EF对

重写,方法名要相同,返回类型和参数,至少有一个不同。
参数不同可分为个数不同和类型不同

统一类中的叫重载,,继承关系的叫覆盖,,
重载的参数的类型,个数,以及顺序之一要不同;
覆盖的参数的一切属性都要相同,返回类型也要一样,
且访问权限不能低于要覆盖的方法。。